home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.27-7 / scripts / Makefile.build < prev    next >
Encoding:
Makefile  |  2008-10-09  |  11.1 KB  |  374 lines

  1. # ==========================================================================
  2. # Building
  3. # ==========================================================================
  4.  
  5. src := $(obj)
  6.  
  7. PHONY := __build
  8. __build:
  9.  
  10. # Init all relevant variables used in kbuild files so
  11. # 1) they have correct type
  12. # 2) they do not inherit any value from the environment
  13. obj-y :=
  14. obj-m :=
  15. lib-y :=
  16. lib-m :=
  17. always :=
  18. targets :=
  19. subdir-y :=
  20. subdir-m :=
  21. EXTRA_AFLAGS   :=
  22. EXTRA_CFLAGS   :=
  23. EXTRA_CPPFLAGS :=
  24. EXTRA_LDFLAGS  :=
  25. asflags-y  :=
  26. ccflags-y  :=
  27. cppflags-y :=
  28. ldflags-y  :=
  29.  
  30. # Read auto.conf if it exists, otherwise ignore
  31. -include include/config/auto.conf
  32.  
  33. include scripts/Kbuild.include
  34.  
  35. # For backward compatibility check that these variables do not change
  36. save-cflags := $(CFLAGS)
  37.  
  38. # The filename Kbuild has precedence over Makefile
  39. kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
  40. kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
  41. include $(kbuild-file)
  42.  
  43. # If the save-* variables changed error out
  44. ifeq ($(KBUILD_NOPEDANTIC),)
  45.         ifneq ("$(save-cflags)","$(CFLAGS)")
  46.                 $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS)
  47.         endif
  48. endif
  49. include scripts/Makefile.lib
  50.  
  51. ifdef host-progs
  52. ifneq ($(hostprogs-y),$(host-progs))
  53. $(warning kbuild: $(obj)/Makefile - Usage of host-progs is deprecated. Please replace with hostprogs-y!)
  54. hostprogs-y += $(host-progs)
  55. endif
  56. endif
  57.  
  58. # Do not include host rules unless needed
  59. ifneq ($(hostprogs-y)$(hostprogs-m),)
  60. include scripts/Makefile.host
  61. endif
  62.  
  63. ifneq ($(KBUILD_SRC),)
  64. # Create output directory if not already present
  65. _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
  66.  
  67. # Create directories for object files if directory does not exist
  68. # Needed when obj-y := dir/file.o syntax is used
  69. _dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
  70. endif
  71.  
  72. ifndef obj
  73. $(warning kbuild: Makefile.build is included improperly)
  74. endif
  75.  
  76. # ===========================================================================
  77.  
  78. ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),)
  79. lib-target := $(obj)/lib.a
  80. endif
  81.  
  82. ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(lib-target)),)
  83. builtin-target := $(obj)/built-in.o
  84. endif
  85.  
  86. modorder-target := $(obj)/modules.order
  87.  
  88. # We keep a list of all modules in $(MODVERDIR)
  89.  
  90. __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
  91.      $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
  92.      $(subdir-ym) $(always)
  93.     @:
  94.  
  95. # Linus' kernel sanity checking tool
  96. ifneq ($(KBUILD_CHECKSRC),0)
  97.   ifeq ($(KBUILD_CHECKSRC),2)
  98.     quiet_cmd_force_checksrc = CHECK   $<
  99.           cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
  100.   else
  101.       quiet_cmd_checksrc     = CHECK   $<
  102.             cmd_checksrc     = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
  103.   endif
  104. endif
  105.  
  106. # Do section mismatch analysis for each module/built-in.o
  107. ifdef CONFIG_DEBUG_SECTION_MISMATCH
  108.   cmd_secanalysis = ; scripts/mod/modpost $@
  109. endif
  110.  
  111. # Compile C sources (.c)
  112. # ---------------------------------------------------------------------------
  113.  
  114. # Default is built-in, unless we know otherwise
  115. modkern_cflags := $(CFLAGS_KERNEL)
  116. quiet_modtag := $(empty)   $(empty)
  117.  
  118. $(real-objs-m)        : modkern_cflags := $(CFLAGS_MODULE)
  119. $(real-objs-m:.o=.i)  : modkern_cflags := $(CFLAGS_MODULE)
  120. $(real-objs-m:.o=.s)  : modkern_cflags := $(CFLAGS_MODULE)
  121. $(real-objs-m:.o=.lst): modkern_cflags := $(CFLAGS_MODULE)
  122.  
  123. $(real-objs-m)        : quiet_modtag := [M]
  124. $(real-objs-m:.o=.i)  : quiet_modtag := [M]
  125. $(real-objs-m:.o=.s)  : quiet_modtag := [M]
  126. $(real-objs-m:.o=.lst): quiet_modtag := [M]
  127.  
  128. $(obj-m)              : quiet_modtag := [M]
  129.  
  130. # Default for not multi-part modules
  131. modname = $(basetarget)
  132.  
  133. $(multi-objs-m)         : modname = $(modname-multi)
  134. $(multi-objs-m:.o=.i)   : modname = $(modname-multi)
  135. $(multi-objs-m:.o=.s)   : modname = $(modname-multi)
  136. $(multi-objs-m:.o=.lst) : modname = $(modname-multi)
  137. $(multi-objs-y)         : modname = $(modname-multi)
  138. $(multi-objs-y:.o=.i)   : modname = $(modname-multi)
  139. $(multi-objs-y:.o=.s)   : modname = $(modname-multi)
  140. $(multi-objs-y:.o=.lst) : modname = $(modname-multi)
  141.  
  142. quiet_cmd_cc_s_c = CC $(quiet_modtag)  $@
  143. cmd_cc_s_c       = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
  144.  
  145. $(obj)/%.s: $(src)/%.c FORCE
  146.     $(call if_changed_dep,cc_s_c)
  147.  
  148. quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@
  149. cmd_cc_i_c       = $(CPP) $(c_flags)   -o $@ $<
  150.  
  151. $(obj)/%.i: $(src)/%.c FORCE
  152.     $(call if_changed_dep,cc_i_c)
  153.  
  154. quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
  155. cmd_cc_symtypes_c       = \
  156.         $(CPP) -D__GENKSYMS__ $(c_flags) $<            \
  157.         | $(GENKSYMS) -T $@ >/dev/null;                \
  158.         test -s $@ || rm -f $@
  159.  
  160. $(obj)/%.symtypes : $(src)/%.c FORCE
  161.     $(call if_changed_dep,cc_symtypes_c)
  162.  
  163. # C (.c) files
  164. # The C file is compiled and updated dependency information is generated.
  165. # (See cmd_cc_o_c + relevant part of rule_cc_o_c)
  166.  
  167. quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
  168.  
  169. ifndef CONFIG_MODVERSIONS
  170. cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
  171.  
  172. else
  173. # When module versioning is enabled the following steps are executed:
  174. # o compile a .tmp_<file>.o from <file>.c
  175. # o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does
  176. #   not export symbols, we just rename .tmp_<file>.o to <file>.o and
  177. #   are done.
  178. # o otherwise, we calculate symbol versions using the good old
  179. #   genksyms on the preprocessed source and postprocess them in a way
  180. #   that they are usable as a linker script
  181. # o generate <file>.o from .tmp_<file>.o using the linker to
  182. #   replace the unresolved symbols __crc_exported_symbol with
  183. #   the actual value of the checksum generated by genksyms
  184.  
  185. cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
  186. cmd_modversions =                            \
  187.     if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then    \
  188.         $(CPP) -D__GENKSYMS__ $(c_flags) $<            \
  189.         | $(GENKSYMS) $(if $(KBUILD_SYMTYPES),            \
  190.                   -T $(@D)/$(@F:.o=.symtypes)) -a $(ARCH)    \
  191.         > $(@D)/.tmp_$(@F:.o=.ver);                \
  192.                                     \
  193.         $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F)         \
  194.             -T $(@D)/.tmp_$(@F:.o=.ver);            \
  195.         rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver);    \
  196.     else                                \
  197.         mv -f $(@D)/.tmp_$(@F) $@;                \
  198.     fi;
  199. endif
  200.  
  201. define rule_cc_o_c
  202.     $(call echo-cmd,checksrc) $(cmd_checksrc)              \
  203.     $(call echo-cmd,cc_o_c) $(cmd_cc_o_c);                  \
  204.     $(cmd_modversions)                          \
  205.     scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' >    \
  206.                                                   $(dot-target).tmp;  \
  207.     rm -f $(depfile);                          \
  208.     mv -f $(dot-target).tmp $(dot-target).cmd
  209. endef
  210.  
  211. # Built-in and composite module parts
  212. $(obj)/%.o: $(src)/%.c FORCE
  213.     $(call cmd,force_checksrc)
  214.     $(call if_changed_rule,cc_o_c)
  215.  
  216. # Single-part modules are special since we need to mark them in $(MODVERDIR)
  217.  
  218. $(single-used-m): $(obj)/%.o: $(src)/%.c FORCE
  219.     $(call cmd,force_checksrc)
  220.     $(call if_changed_rule,cc_o_c)
  221.     @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
  222.  
  223. quiet_cmd_cc_lst_c = MKLST   $@
  224.       cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
  225.              $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
  226.                      System.map $(OBJDUMP) > $@
  227.  
  228. $(obj)/%.lst: $(src)/%.c FORCE
  229.     $(call if_changed_dep,cc_lst_c)
  230.  
  231. # Compile assembler sources (.S)
  232. # ---------------------------------------------------------------------------
  233.  
  234. modkern_aflags := $(AFLAGS_KERNEL)
  235.  
  236. $(real-objs-m)      : modkern_aflags := $(AFLAGS_MODULE)
  237. $(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE)
  238.  
  239. quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
  240. cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $< 
  241.  
  242. $(obj)/%.s: $(src)/%.S FORCE
  243.     $(call if_changed_dep,as_s_S)
  244.  
  245. quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
  246. cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
  247.  
  248. $(obj)/%.o: $(src)/%.S FORCE
  249.     $(call if_changed_dep,as_o_S)
  250.  
  251. targets += $(real-objs-y) $(real-objs-m) $(lib-y)
  252. targets += $(extra-y) $(MAKECMDGOALS) $(always)
  253.  
  254. # Linker scripts preprocessor (.lds.S -> .lds)
  255. # ---------------------------------------------------------------------------
  256. quiet_cmd_cpp_lds_S = LDS     $@
  257.       cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
  258.  
  259. $(obj)/%.lds: $(src)/%.lds.S FORCE
  260.     $(call if_changed_dep,cpp_lds_S)
  261.  
  262. # Build the compiled-in targets
  263. # ---------------------------------------------------------------------------
  264.  
  265. # To build objects in subdirs, we need to descend into the directories
  266. $(sort $(subdir-obj-y)): $(subdir-ym) ;
  267.  
  268. #
  269. # Rule to compile a set of .o files into one .o file
  270. #
  271. ifdef builtin-target
  272. quiet_cmd_link_o_target = LD      $@
  273. # If the list of objects to link is empty, just create an empty built-in.o
  274. cmd_link_o_target = $(if $(strip $(obj-y)),\
  275.               $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
  276.               $(cmd_secanalysis),\
  277.               rm -f $@; $(AR) rcs $@)
  278.  
  279. $(builtin-target): $(obj-y) FORCE
  280.     $(call if_changed,link_o_target)
  281.  
  282. targets += $(builtin-target)
  283. endif # builtin-target
  284.  
  285. #
  286. # Rule to create modules.order file
  287. #
  288. # Create commands to either record .ko file or cat modules.order from
  289. # a subdirectory
  290. modorder-cmds =                        \
  291.     $(foreach m, $(modorder),            \
  292.         $(if $(filter %/modules.order, $m),    \
  293.             cat $m;, echo kernel/$m;))
  294.  
  295. $(modorder-target): $(subdir-ym) FORCE
  296.     $(Q)(cat /dev/null; $(modorder-cmds)) > $@
  297.  
  298. #
  299. # Rule to compile a set of .o files into one .a file
  300. #
  301. ifdef lib-target
  302. quiet_cmd_link_l_target = AR      $@
  303. cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y)
  304.  
  305. $(lib-target): $(lib-y) FORCE
  306.     $(call if_changed,link_l_target)
  307.  
  308. targets += $(lib-target)
  309. endif
  310.  
  311. #
  312. # Rule to link composite objects
  313. #
  314. #  Composite objects are specified in kbuild makefile as follows:
  315. #    <composite-object>-objs := <list of .o files>
  316. #  or
  317. #    <composite-object>-y    := <list of .o files>
  318. link_multi_deps =                     \
  319. $(filter $(addprefix $(obj)/,         \
  320. $($(subst $(obj)/,,$(@:.o=-objs)))    \
  321. $($(subst $(obj)/,,$(@:.o=-y)))), $^)
  322.  
  323. quiet_cmd_link_multi-y = LD      $@
  324. cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
  325.  
  326. quiet_cmd_link_multi-m = LD [M]  $@
  327. cmd_link_multi-m = $(cmd_link_multi-y)
  328.  
  329. # We would rather have a list of rules like
  330. #     foo.o: $(foo-objs)
  331. # but that's not so easy, so we rather make all composite objects depend
  332. # on the set of all their parts
  333. $(multi-used-y) : %.o: $(multi-objs-y) FORCE
  334.     $(call if_changed,link_multi-y)
  335.  
  336. $(multi-used-m) : %.o: $(multi-objs-m) FORCE
  337.     $(call if_changed,link_multi-m)
  338.     @{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
  339.  
  340. targets += $(multi-used-y) $(multi-used-m)
  341.  
  342.  
  343. # Descending
  344. # ---------------------------------------------------------------------------
  345.  
  346. PHONY += $(subdir-ym)
  347. $(subdir-ym):
  348.     $(Q)$(MAKE) $(build)=$@
  349.  
  350. # Add FORCE to the prequisites of a target to force it to be always rebuilt.
  351. # ---------------------------------------------------------------------------
  352.  
  353. PHONY += FORCE
  354.  
  355. FORCE:
  356.  
  357. # Read all saved command lines and dependencies for the $(targets) we
  358. # may be building above, using $(if_changed{,_dep}). As an
  359. # optimization, we don't need to read them if the target does not
  360. # exist, we will rebuild anyway in that case.
  361.  
  362. targets := $(wildcard $(sort $(targets)))
  363. cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
  364.  
  365. ifneq ($(cmd_files),)
  366.   include $(cmd_files)
  367. endif
  368.  
  369.  
  370. # Declare the contents of the .PHONY variable as phony.  We keep that
  371. # information in a variable se we can use it in if_changed and friends.
  372.  
  373. .PHONY: $(PHONY)
  374.